草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

c++ - 在复制初始化中是否返回对本地对象未定义行为的引用?

考虑以下代码:structfoo{foo(fooconst&)=default;//Tomakesureitexists};foo&get_local_foo_reference(){foomy_local_foo;returnmy_local_foo;//Returnareferencetoalocalvariable}intmain(){foomy_foo=get_local_foo_reference();}现在每个人都会同意返回对局部变量的引用是不好的并且会导致未定义的行为。但在copyinitialization的情况下(如上代码所示)参数是一个常量左值引用,所以它应该是一个

c++ - 如何测试 std::memory_order_relaxed 的行为?

我已经阅读了std::memory_order_relaxed的文档.Relaxedordering的部分解释是......//Thread1:r1=y.load(memory_order_relaxed);//Ax.store(r1,memory_order_relaxed);//B//Thread2:r2=x.load(memory_order_relaxed);//Cy.store(42,memory_order_relaxed);//D对此的解释是……[It]isallowedtoproducer1==r2==42.Inparticular,thismayoccurifDisc

c++ - 未定义/未指定/实现定义的行为警告?

当编译器注意到具有未定义/未指定/实现定义行为的语句时,它不能发出警告(如果它抛出错误则更好)吗?可能会将语句标记为错误,标准应该这样说,但它至少可以警告编码人员。实现这样的选择有什么技术困难吗?还是根本不可能?我得到这个问题的原因是,在像a[i]=++i;这样的语句中,它不会知道代码正在尝试引用一个变量并在同一个变量中修改它语句,在到达序列点之前。 最佳答案 归根结底实现质量:警告越准确、越有用,就越好。一个总是为每个程序打印“这个程序可能会或可能不会调用未定义的行为”然后编译它的编译器是非常无用的,但它是符合标准的。值得庆幸的是

c++ - 当 >> 字符串流时更改双引号的行为

这是我正在尝试做的事情:假设我有一个字符串流。然后我然后当我做sstr>>myString1>>myString2;我希望myString1有“helloworld”并且myString2有“今天”有没有办法(可能是通过操纵器)实现这一点?谢谢 最佳答案 简短回答:否长答案:没有任何操作可以为您做到这一点。替代答案:您可以编写自己的类型,与流运算符结合使用来完成此任务。#include#include#include#include#includeclassQuotedWord{public:operatorstd::stringc

c++ - MSVCC/g++/icc 中 std deque/vector 之间的不同行为

我有一段非常简单的代码;#include#includeusingnamespacestd;classA{public:A(){};~A(){};dequemy_array;//vectormy_array;};intmain(void){}如果我在Linux上同时使用g++和icc/icpc编译这段代码,它编译得很好,即使使用-Wall也不会给出任何警告。如果我将双端队列交换为vector,情况是一样的。我想在Windows上使用MSVCC(cl)构建此代码,但不幸的是它会抛出错误c2027:errorC2027:useofundefinedtype'A'但是,如果我将std::de

c++ - memset() 的意外行为

我正在用所有元素中的99初始化数组#include#includeintmain(){inta[10];memset(a,99,10);std::cout但我得到的输出是出乎意料的。输出:-1667457891这个memset函数异常行为背后的原因是什么。 最佳答案 首先,memset采用字节大小,而不是数组元素的数量,因为它不知道每个元素有多大。您需要使用sizeof来获取数组的字节大小,并将其提供给memset:memset(a,99,sizeof(a));但是,在C++中,更喜欢std::fill,因为它是类型安全的、更灵活的

C++ 奇怪的构造函数行为

谁能给我解释一下Complexa;和Complexb();之间的区别?#includeclassComplex{public:Complex(){std::cout输出:ComplexConstructor1----------------------------------------------------ComplexConstructor2--------------------------ComplexDestructorComplexDestructor如您所见,Complexa;会调用其默认构造函数,Complexb();不会,而Complexc(0,0);调用一个重载的

C++ 意外行为(我的临时对象在哪里!?)

这是一个r值实验,但当gcc向我提示缺少移动构造函数(我已将其删除)并且没有回退到复制构造函数(如我所料)时,它发生了变化然后我从标志中删除了-std=c++11并尝试了你在下面看到的内容,它有很多输出(最初没有)因为我试图弄清楚为什么它不起作用(我知道如何调试,但我发现stdout上的消息可以很好地指示正在发生的事情)这是我的代码:#includeclassObject{public:Object(){id=nextId;std::cout输出:Creatingobject:0AoughttoexistIntestCreatingobject:1Test'stmpoughttoexi

c++ - "delete"与堆栈对象的行为是什么?

这个问题在这里已经有了答案:Isitpossibletodeleteanon-newobject?(4个答案)关闭4年前。intmain(){Class_Namet;Class_Name*p=&t;deletep;return0;}这段代码在调用2个析构函数的情况下执行得很好吗?delete如何处理堆栈对象?行为是否未定义?

c++ - 调用虚函数时的奇怪行为

我不明白这段代码有什么问题。它看起来像一个不可思议的陷阱!这段代码:classFoo{public:virtualdoublefoo(doublex)const=0;doublefoo(intx)const{return(double)(x+x);}};classBar:publicFoo{public:virtualdoublefoo(doublex)const{returnx*x;}};intmain(){Bar*b=newBar;Foo*f=b;std::coutfoo(3)foo(3)foo(5.0)foo(5.0)打印以下输出:962525我推断,当指针的类型为Bar*时,B